// 集群，多进程，让多个进程来工作
// 进程也不能无限止的创建，进程它会消耗内存，在有一些应用中，不建议开多进程，
// 进程切换是要消耗cpu  复杂的计算 写入文件
// 进程创建的数量一般和cpu核数相同，最多不要超过4倍
const numCPUs = require('os').cpus().length
const cluster = require('cluster')

// node 03_fork.js 当前这个文件它会先创建一个master主进程,如果你没有在主进程中创建子进程，则执行完主进程就进程就结束了
// master
//    child
//    child

// 判断当前进程是否为主进程，只有在主进程中才能创建子进程
// console.log(cluster.isMaster);
// console.log('master');


if (cluster.isMaster) {
  console.log('主进程 == ' + process.pid);
  for (let i = 0; i < numCPUs; i++) {
    let worker = cluster.fork()
    worker.send(i)
  }

} else {

  // 事件
  process.on('message', index => {
    console.log('子进程 == ' + index + ' == ' + process.pid);
    process.send('11')
  })


}

let num = numCPUs
cluster.on('message', arg => {
  if (--num === 0) {
    console.log('master === 有返回');
    // 关闭子进程
    cluster.disconnect()
  }
})






